package com.singleton.lazy;

/**
 * 懒汉式 - 同步方法
 * 在03中介绍了一般的 懒汉式 是线程不安全的，主要是在if判断的时候可能出现两个线程都进入到if判断中
 * 这里就通过同步方法的方式，给创建对象的方法加锁，以此实现线程安全
 *
 * 1 构造方法私有
 * 2 静态成员变量
 * 3 public static getInstance 方法判断对象是否创建了，没有创建再创建
 *      为了避免线程不安全，给这个方法加锁
 */
public class Singleton_04 {

    public static void main(String[] args) {
        Single04 instance1 = Single04.getInstance();
        Single04 instance2 = Single04.getInstance();
        System.out.println(instance1 == instance2 );
        System.out.println("instance1 hashcode :" + instance1);
        System.out.println("instance2 hashcode :" + instance2);
    }
}

class Single04{
    //1 构造方法私有
    public Single04(){}
    //2 静态变量
    public static Single04 single04 ;
    //3 创建对象的方法
    public synchronized static Single04 getInstance(){
        if (single04 == null){
            single04 = new Single04() ;
        }
        return  single04;
    }
}
